//package com.hk.jmm.app.fragment;
//
//import android.Manifest;
//import android.content.Intent;
//import android.graphics.SurfaceTexture;
//import android.hardware.usb.UsbDevice;
//import android.hardware.usb.UsbManager;
//import android.os.Bundle;
//import android.os.Handler;
//import android.os.SystemClock;
//import android.util.Log;
//import android.view.TextureView;
//import android.view.View;
//import android.widget.TextView;
//
//import androidx.annotation.NonNull;
//import androidx.annotation.Nullable;
//
//import com.herohan.uvcapp.CameraHelper;
//import com.herohan.uvcapp.ICameraHelper;
//import com.herohan.uvcapp.ImageCapture;
//import com.herohan.uvcapp.VideoCapture;
//import com.hjq.toast.ToastUtils;
//import com.hk.jmm.R;
//import com.hk.jmm.model.AiModel;
//import com.hk.jmm.presenter.TestPresenter;
//import com.hk.jmm.utils.SaveHelper;
//import com.serenegiant.usb.IButtonCallback;
//import com.serenegiant.usb.Size;
//import com.serenegiant.utils.UriHelper;
//import com.serenegiant.widget.AspectRatioTextureView;
//import com.skyz.base.activity.BaseMvpActivity;
//
//import java.io.File;
//import java.text.DecimalFormat;
//import java.util.List;
//import java.util.Timer;
//import java.util.TimerTask;
//
//public class TestActivityback extends  BaseMvpActivity<AiModel, TestActivityback, TestPresenter> {
//    CameraHelper cameraHelper;
//
//    private boolean mIsCameraConnected = false;
//    TextView tvVideoRecordTime;
//
//
//    private AspectRatioTextureView viewMainPreview;
//    public TextView logTv;
//    View layout_none_usb;
//    TextView tv_hint;
//
//    @Override
//    protected void onMessageEvent(Object event) {
//
//    }
//
//    @Override
//    protected void onCreate(@Nullable Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//
//    }
//
//    @Override
//    protected void onStart() {
//        super.onStart();
//        getMvpPresenter().log("onViewCreated:"+width+":"+height);
//        viewMainPreview.setAspectRatio(width, height);
//        checkCameraHelper();
//    }
//
//    @Override
//    protected TestPresenter initMvpPresenter() {
//        return new TestPresenter(this, getLifecycle());
//    }
//
//
//    @Override
//    protected int getLayoutId() {
//        return R.layout.fragment_home_ai;
//    }
//
//    @Override
//    protected void onLayoutInflated() {
//        setLayoutFullScreen(true);
//        tvVideoRecordTime = findViewById(R.id.tvVideoRecordTime);
//        tvVideoRecordTime.setVisibility(View.GONE);
//        viewMainPreview = findViewById(R.id.viewMainPreview);
//        layout_none_usb = findViewById(R.id.layout_none_usb);
//        tv_hint = findViewById(R.id.tv_hint);
//        logTv = findViewById(R.id.tv_log);
//        findViewById(R.id.click_recording).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //录制
//                requestPermission("录制视频需要权限",1002,new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO});
//            }
//        });
//        findViewById(R.id.click_photos).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //拍照
//                requestPermission("拍照需要权限",1003,new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE});
//            }
//        });
//
//        findViewById(R.id.click_jingpai).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //todo 镜拍
//            }
//        });
//        findViewById(R.id.click_full).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //todo 全屏
//            }
//        });
//        findViewById(R.id.click_live).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //todo 推流
//            }
//        });
//        findViewById(R.id.click_aisca).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //todo ai识别
//            }
//        });
//        findViewById(R.id.click_settings).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //todo 设置
//            }
//        });
//
//        findViewById(R.id.click_todbuy).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                //todo 去购买
//            }
//        });
//
//        viewMainPreview.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
//            @Override
//            public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) {
//                getMvpPresenter().log(new StringBuffer().append("onSurfaceTextureAvailable:").append(width).append(":").append(height).toString());
//                if (cameraHelper != null) {
//                    cameraHelper.addSurface(surface, false);
//                }
//            }
//
//            @Override
//            public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surface, int width, int height) {
//                getMvpPresenter().log(new StringBuffer().append("onSurfaceTextureSizeChanged:").append(width).append(":").append(height).toString());
//            }
//
//            @Override
//            public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) {
//                getMvpPresenter().log(new StringBuffer().append("onSurfaceTextureDestroyed").toString());
//                if (cameraHelper != null) {
//                    cameraHelper.removeSurface(surface);
//                }
//                return false;
//            }
//
//            @Override
//            public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surface) {
//                getMvpPresenter().log(new StringBuffer().append("onSurfaceTextureUpdated").toString());
//            }
//        });
//    }
//    final int width =3264;
//    final int height = 2448;
//    @Override
//    protected void initData(Bundle savedInstanceState) {
//
//    }
//
//    @Override
//    public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
//        super.onPermissionsGranted(requestCode, perms);
//        if(requestCode==1001){
//            if (cameraHelper != null) {
//                // 通过UsbDevice对象，尝试获取设备权限
//                getMvpPresenter().log("onPermissionsGranted:device=" + mUsbDevice.getDeviceName());
//                cameraHelper.selectDevice(mUsbDevice);
//            }
//        }else if(requestCode==1002){
//            toggleVideoRecord(!mIsRecording);
//        }else if(requestCode==1003){
//            takePicture();
//        }
//
//
//    }
//
//    private void checkCameraHelper() {
//        if (!mIsCameraConnected) {
//            clearCameraHelper();
//        }
//        initCameraHelper();
//    }
//
//    private void initCameraHelper() {
//        getMvpPresenter().log("initCameraHelper");
//        if (cameraHelper == null) {
//            getMvpPresenter().log("initCameraHelper new CameraHelper");
//            cameraHelper = new CameraHelper();
//            cameraHelper.setStateCallback(mStateListener);
//        }
//        setCustomImageCaptureConfig();
//        setCustomVideoCaptureConfig();
//    }
//
//    private  final Handler handler = new Handler();
//
//    private void selectDevice(final UsbDevice device) {
//        mUsbDevice = device;
//        getMvpPresenter().log("selectDevice:device=" + device.getDeviceName());
//        requestPermission("需要权限",1001, new String[]{
//                Manifest.permission.CAMERA
//        });
//    }
//    UsbDevice mUsbDevice;
//    public void attachNewDevice(UsbDevice device) {
//        if (mUsbDevice == null) {
//            selectDevice(device);
//        }
//    }
//    private final ICameraHelper.StateCallback mStateListener = new ICameraHelper.StateCallback() {
//        @Override
//        public void onAttach(UsbDevice device) {
//            getMvpPresenter().log("onAttach:"+device.getDeviceName());
//            attachNewDevice(device);
//            showHint("正在连接设备");
//        }
//
//        @Override
//        public void onDeviceOpen(UsbDevice device, boolean isFirstOpen) {
//            getMvpPresenter().log("onDeviceOpen:"+device.getDeviceName()+",isFirstOpen:"+isFirstOpen);
//            cameraHelper.openCamera();
//            cameraHelper.setButtonCallback(new IButtonCallback() {
//                @Override
//                public void onButton(int button, int state) {
//                    getMvpPresenter().log("onButton(button=" + button + "; " +
//                            "state=" + state + ")");
//                }
//            });
//            showHint("正在打开设备");
//        }
//
//        @Override
//        public void onCameraOpen(UsbDevice device) {
//            getMvpPresenter().log("onCameraOpen:"+device.getDeviceName());
//            showHint("正在打开摄像头");
//            cameraHelper.startPreview();
//            mIsCameraConnected = true;
//
//            Size size = cameraHelper.getPreviewSize();
//            if (size != null) {
////                int width = viewMainPreview.getWidth();
////                int height = viewMainPreview.getHeight();
//                getMvpPresenter().log("onCameraOpen:"+width+":"+height);
//                viewMainPreview.setAspectRatio(width, height);
//            }
//            if (viewMainPreview.getSurfaceTexture() != null) {
//                cameraHelper.addSurface(viewMainPreview.getSurfaceTexture(), false);
//            }
//            updateUIControls();
//        }
//
//        @Override
//        public void onCameraClose(UsbDevice device) {
//            getMvpPresenter().log("onCameraClose:"+device.getDeviceName());
//            if (cameraHelper != null && viewMainPreview.getSurfaceTexture() != null) {
//                cameraHelper.removeSurface(viewMainPreview.getSurfaceTexture());
//            }
//            if (mIsRecording) {
//                toggleVideoRecord(false);
//            }
//            mIsCameraConnected = false;
//            updateUIControls();
//            showHint("摄像头已关闭");
//        }
//
//        @Override
//        public void onDeviceClose(UsbDevice device) {
//            getMvpPresenter().log("onDeviceClose:"+device.getDeviceName());
//            showHint("设备已关闭");
//        }
//
//        @Override
//        public void onDetach(UsbDevice device) {
//            if (device.equals(mUsbDevice)) {
//                mUsbDevice = null;
//            }
//            getMvpPresenter().log("onDetach:"+device.getDeviceName());
//            showHint("设备已拔出");
//        }
//
//        @Override
//        public void onCancel(UsbDevice device) {
//            getMvpPresenter().log("onCancel:"+device.getDeviceName());
//            if (device.equals(mUsbDevice)) {
//                mUsbDevice = null;
//            }
//            showHint("设备已取消");
//        }
//    };
//
//
//    private void clearCameraHelper() {
//        getMvpPresenter().log("clearCameraHelper");
//        if (cameraHelper != null) {
//            cameraHelper.release();
//            cameraHelper = null;
//        }
//    }
//    @Override
//    public void onStop() {
//        super.onStop();
//
//    }
//
//    @Override
//    public void onDestroy() {
//        super.onDestroy();
//        if (mIsRecording) {
//            toggleVideoRecord(false);
//        }
//        clearCameraHelper();
//        handler.removeCallbacksAndMessages(null);
//    }
//
//    private void updateUIControls(){
//       runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                layout_none_usb.setVisibility(mIsCameraConnected?View.GONE:View.VISIBLE);
//                viewMainPreview.setVisibility(mIsCameraConnected?View.VISIBLE:View.GONE);
//            }
//        });
//
//    }
//
//    private void showHint(String msg){
//        if(mUsbDevice==null){
//            layout_none_usb.setVisibility(View.VISIBLE);
//            tv_hint.setText("请将智能眼镜设备插入手机 \n USB-C接口");
//        }else {
//            layout_none_usb.setVisibility(View.INVISIBLE);
//            tv_hint.setText(msg);
//        }
//
//    }
//
//
//    private void setCustomImageCaptureConfig() {
//        cameraHelper.setImageCaptureConfig(
//                cameraHelper.getImageCaptureConfig().setJpegCompressionQuality(90));
//    }
//    private void setCustomVideoCaptureConfig() {
//        cameraHelper.setVideoCaptureConfig(
//                cameraHelper.getVideoCaptureConfig()
////                        .setAudioCaptureEnable(false)
//                        .setBitRate((int) (1024 * 1024 * 25 * 0.25))
//                        .setVideoFrameRate(25)
//                        .setIFrameInterval(1));
//    }
//
//    private void startRecord() {
//        getMvpPresenter().log("startRecord");
//        File file = new File(SaveHelper.getSaveVideoPath());
//        VideoCapture.OutputFileOptions options =
//                new VideoCapture.OutputFileOptions.Builder(file).build();
//        cameraHelper.startRecording(options, new VideoCapture.OnVideoCaptureCallback() {
//            @Override
//            public void onStart() {
//                getMvpPresenter().log("startRecording onStart");
//                startRecordTimer();
//            }
//
//            @Override
//            public void onVideoSaved(@NonNull VideoCapture.OutputFileResults outputFileResults) {
//                getMvpPresenter().log("startRecording onVideoSaved:"+ UriHelper.getPath(TestActivityback.this, outputFileResults.getSavedUri()));
//                toggleVideoRecord(false);
//            }
//
//            @Override
//            public void onError(int videoCaptureError, @NonNull String message, @Nullable Throwable cause) {
//                toggleVideoRecord(false);
//                getMvpPresenter().log("startRecording onError:videoCaptureError="+videoCaptureError+",message="+message);
//
//            }
//        });
//    }
//
//    private void stopRecord() {
//        getMvpPresenter().log("stopRecord");
//        cameraHelper.stopRecording();
//    }
//
//    boolean mIsRecording =false;
//    public void toggleVideoRecord(boolean isRecording) {
//        getMvpPresenter().log("toggleVideoRecord isRecording :"+isRecording);
//        try {
//            if (isRecording) {
//                if (mIsCameraConnected && cameraHelper != null && !cameraHelper.isRecording()) {
//                    startRecord();
//                }
//            } else {
//                if (mIsCameraConnected && cameraHelper != null && cameraHelper.isRecording()) {
//                    stopRecord();
//                }
//                stopRecordTimer();
//            }
//        } catch (Exception e) {
//            Log.e(TAG, e.getLocalizedMessage(), e);
//            getMvpPresenter().log("toggleVideoRecord Exception :"+e.getLocalizedMessage());
//            stopRecordTimer();
//        }
//
//        mIsRecording = isRecording;
//
//        updateUIControls();
//
//    }
//
//
//    private long mRecordStartTime = 0;
//    private Timer mRecordTimer = null;
//    private static final int QUARTER_SECOND = 250;
//    private void startRecordTimer() {
//        getMvpPresenter().log("startRecordTimer ");
//        runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                tvVideoRecordTime.setVisibility(View.VISIBLE);
//            }
//        });
//
//        // Set “00:00:00” to record time TextView
//        setVideoRecordTimeText(formatTime(0));
//
//        // Start Record Timer
//        mRecordStartTime = SystemClock.elapsedRealtime();
//        mRecordTimer = new Timer();
//        //The timer is refreshed every quarter second
//        mRecordTimer.schedule(new TimerTask() {
//            @Override
//            public void run() {
//                long recordTime = (SystemClock.elapsedRealtime() - mRecordStartTime) / 1000;
//                if (recordTime > 0) {
//                    setVideoRecordTimeText(formatTime(recordTime));
//                }
//            }
//        }, QUARTER_SECOND, QUARTER_SECOND);
//    }
//
//    private void stopRecordTimer() {
//        getMvpPresenter().log("stopRecordTimer ");
//       runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                tvVideoRecordTime.setVisibility(View.GONE);
//            }
//        });
//        // Stop Record Timer
//        mRecordStartTime = 0;
//        if (mRecordTimer != null) {
//            mRecordTimer.cancel();
//            mRecordTimer = null;
//        }
//        // Set “00:00:00” to record time TextView
//        setVideoRecordTimeText(formatTime(0));
//    }
//
//    private void setVideoRecordTimeText(String timeText) {
//        runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                tvVideoRecordTime.setText(timeText);
//            }
//        });
//    }
//
//    private DecimalFormat mDecimalFormat;
//    /**
//     * 将秒转化为 HH:mm:ss 的格式
//     *
//     * @param time 秒
//     * @return
//     */
//    private String formatTime(long time) {
//        if (mDecimalFormat == null) {
//            mDecimalFormat = new DecimalFormat("00");
//        }
//        String hh = mDecimalFormat.format(time / 3600);
//        String mm = mDecimalFormat.format(time % 3600 / 60);
//        String ss = mDecimalFormat.format(time % 60);
//        return hh + ":" + mm + ":" + ss;
//    }
//
//
//    public void takePicture() {
//        getMvpPresenter().log("takePicture :mIsRecording"+mIsRecording);
//        if (mIsRecording) {
//            ToastUtils.show("正在录制视频");
//            return;
//        }
//
//        try {
//            File file = new File(SaveHelper.getSavePhotoPath());
//            ImageCapture.OutputFileOptions options =
//                    new ImageCapture.OutputFileOptions.Builder(file).build();
//            cameraHelper.takePicture(options, new ImageCapture.OnImageCaptureCallback() {
//                @Override
//                public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
//                    getMvpPresenter().log("takePicture :onImageSaved "+outputFileResults.getSavedUri());
//                }
//
//                @Override
//                public void onError(int imageCaptureError, @NonNull String message, @Nullable Throwable cause) {
//                    getMvpPresenter().log("startRecording onError:imageCaptureError="+imageCaptureError+",message="+message);
//                }
//            });
//        } catch (Exception e) {
//            getMvpPresenter().log("startRecording Exception="+e.getLocalizedMessage());
//        }
//    }
//
//
//    @Override
//    protected void onNewIntent(Intent intent) {
//        super.onNewIntent(intent);
//        if (!mIsCameraConnected) {
//            mUsbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
//            getMvpPresenter().log("onNewIntent ");
//            selectDevice(mUsbDevice);
//        }
//    }
//}
